package linkedList;

import po.ListNode;

/**
 * @author songZiHao
 * @version 1.0.0
 * @ClassName BaseLinkedListTest.java
 * @Description TODO
 * @createTime 2021年03月09日 17:54:00
 */
public class BaseLinkedListTest {
    /**
     * 1. 先声明一个    listNode    对象，这个对象的指向内存的指针假如是400
     * 再声明一个中转阶段    cur    ，此时    cur    和    listNode    都是同一个指针400，指向实际的一个内存对象
     * 第一次for遍历时候，先创建一个临时对象temp，指向指针为401的一个内存对象
     * 将401这个指针关联到指针400的next上，这时候    listNode=cur    ，即 400.next=401，此时401.next为空
     * 循环中最后一步将    cur    的指针从400切换为401，即此时    listNode    还是400那个对象，    listNode    的next为指针401的那个对象
     * 第二次for循环时候，创建一个指针为402的对象temp
     * 将401的next指向402，即此时    listNode    的状态为400.next=401，而此时401.next=402，形成的链表即为400->401->402
     * 循环的最后一步又将    cur    指针切换为402
     * 第三次for循环，创建一个指针为403的对象temp
     * 将402的next指向403，即即此时    listNode    的状态为400.next=401，401.next=402，402.next=403，形成的链表即为400->401->402->403
     *
     *
     * todo http://www.au92.com/post/link-node/
     */
    protected static ListNode createLinkedList(Integer...integers){
        if (integers.length==0){
            return new ListNode();
        }
        Integer firstNode = integers[0];
        ListNode listNode=new ListNode(firstNode);
        //todo  初始的时候cur和listNode 都指向一个位置
        ListNode cur=listNode,tem=null;
        for (int i = 1; i < integers.length; i++) {
            tem=new ListNode(integers[i]);
            //todo  第一次循环的cur指向的还是listNode，修改cur就是修改listNode
            //todo  第二次循环的时候cur指向的还是listNode的下一个节点，修改cur就是修改listNode的下一个节点  listNode---[next]--->cur。
            cur.next=tem;
            cur=tem;
        }
        return listNode;
    }
}
